#ifndef TIEC_TOKEN_H
#define TIEC_TOKEN_H

#include "macro.h"

namespace NS_TIEC {
  enum TiecodeToken {
    // 包名
    Package = 0,
    // 类
    Class = 1,
    // 继承
    Extends = 2,
    // 变量
    Variable = 3,
    // 常量
    Const = 4,
    // 为
    As = 5,
    // 本对象
    This = 6,
    // 父对象
    Super = 7,
    // 属于
    Instanceof = 8,
    // 创建
    New = 9,
    // 返回
    Return = 10,
    // 结束
    End = 11,
    // 属性
    Property = 12,
    // 事件
    Event = 13,
    // 定义事件
    DefineEvent = 14,
    // 订阅事件
    DispatchEvent = 15,
    // 方法
    Method = 16,
    // 属性读
    PropertyGet = 17,
    // 属性写
    PropertySet = 18,
    // 假如
    Switch = 19,
    // 是
    Case = 20,
    // 如果
    If = 21,
    // 则
    Then = 22,
    // 否则
    Else = 23,
    // 且
    AndAnd = 24,
    // 或
    OrOr = 25,
    // 循环
    Loop = 26,
    // 退出循环
    Break = 27,
    // 跳过循环
    Continue = 28,
    // 等待
    Await = 29,
    // 真
    True = 30,
    // 假
    False = 31,
    // 空
    Null = 32,
    // code ...
    SingleLineCode = 33,
    // @code
    CodeTagStart = 34,
    // @end
    CodeTagEnd = 35,
    // (
    LParen = 36,
    // )
    RParen = 37,
    // {
    LBrace = 38,
    // }
    RBrace = 39,
    // [
    LBrack = 40,
    // ]
    RBrack = 41,
    // ;
    Semicolon = 42,
    // ,
    Comma = 43,
    // .
    Dot = 44,
    // ...
    Ellipsis = 45,
    // @
    At = 46,
    // =
    Eq = 47,
    // >
    Gt = 48,
    // <
    Lt = 49,
    // ?
    Question = 50,
    // :
    Colon = 51,
    // ==
    EqEq = 52,
    // <=
    LtEq = 53,
    // >=
    GtEq = 54,
    // !=
    NotEq = 55,
    // +
    Plus = 56,
    // -
    Minus = 57,
    // *
    Mult = 58,
    // /
    Div = 59,
    // &
    And = 60,
    // |
    Or = 61,
    // ^
    Xor = 62,
    // %
    Mod = 63,
    // ->
    Arrow = 64,
    // <=>
    Exchange = 65,
    // #
    Sharp = 66,
    // 单个字符: 'c'
    LiteralChar = 67,
    // 整数: 123
    LiteralInt = 68,
    // 长整数: 123L
    LiteralLong = 69,
    // 16进制整数: 0x123
    LiteralHexInt = 70,
    // 16进制长整数: 0x123L
    LiteralHexLong = 71,
    // 8进制整数: 0123
    LiteralOctInt = 72,
    // 8进制长整数: 0123L
    LiteralOctLong = 73,
    // 单精度小数: 3.14f
    LiteralFloat = 74,
    // 小数: 3.14
    LiteralDouble = 75,
    // 字符串 "xxxx"
    LiteralString = 76,
    // 长字符串 [[xxxx]]
    LiteralLongString = 77,
    // 单行注释 //...
    LineComment = 78,
    // 多行注释 /* ... */
    LongComment = 79,
    // 空格
    Whitespace = 80,
    // 换行
    Newline = 81,
    // 标识符
    Identifier = 82,
    // 无法识别的字符
    BadChar = 83,
    // EOF文件结尾
    Eof = 84,
  };
}

#endif //TIEC_TOKEN_H
